package com.lws.basic.utils.common;

import android.text.TextUtils;


public class MathUtils {
    /**
     * 补充：计算两点之间真实距离
     *这里还有一个根据经纬度计算两点间真实距离的，一般都直接使用所集成第三方地图SDK中包含的方法，这里还是给出代码
     * @return 米
     */
    public static double getDistanceOther(double longitude1, double latitude1, double longitude2, double latitude2) {
        // 维度
        double lat1 = (Math.PI / 180) * latitude1;
        double lat2 = (Math.PI / 180) * latitude2;

        // 经度
        double lon1 = (Math.PI / 180) * longitude1;
        double lon2 = (Math.PI / 180) * longitude2;

        // 地球半径
        double R = 6371;
        // 两点间距离 km，如果想要米的话，结果*1000就可以了
        double d = Math.acos(Math.sin(lat1) * Math.sin(lat2) + Math.cos(lat1) * Math.cos(lat2) * Math.cos(lon2 - lon1)) * R;
        return d * 1000;
    }

    private static final double EARTH_RADIUS = 6378137.0;

    /**
     * 计算两个坐标点的间距
     * @param longitude1  第一个点经度
     * @param latitude1   第一个点纬度
     * @param longitude2  第二个点经度
     * @param latitude2   第二个点纬度
     * @return  两点间距离
     */
    public static double getDistance(double longitude1, double latitude1,
                                     double longitude2, double latitude2) {
        double Lat1 = rad(latitude1);
        double Lat2 = rad(latitude2);
        double distanceLat = Lat1 - Lat2;
        double distanceLon = rad(longitude1) - rad(longitude2);
        double distance = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(distanceLat / 2), 2)
                + Math.cos(Lat1) * Math.cos(Lat2)
                * Math.pow(Math.sin(distanceLon / 2), 2)));
        distance = distance * EARTH_RADIUS;
        distance = Math.round(distance * 10000) / 10000;
        return distance;
    }

    private static double rad(double d) {
        return d * Math.PI / 180.0;
    }


    /**
     * @param num  需要判断的字符串
     * @return 判断是否位正整数或一位小数或两位小数
     */
    public static boolean isPositiveTwodecimalDoubleNum(String num) {
        String doubleNumRegex = "^[0-9]+([.]{1}[0-9]{1,2})?$";
        if (TextUtils.isEmpty(num)) {
            return false;
        } else {
            return num.matches(doubleNumRegex);
        }

    }
}
